// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
//
// Log format information shared by reader and writer.
// See ../doc/log_format.md for more detail.

#ifndef STORAGE_LEVELDB_DB_LOG_FORMAT_H_
#define STORAGE_LEVELDB_DB_LOG_FORMAT_H_

namespace leveldb {
namespace log {


/*
 * kZeroType 值被预留，目前没有使用。
 * kFullType 表示完整的记录，即所有数据都包含在单个 record 中。
 * kFirstType 用于表示多个 record 组成的 fragment（片段）的第一个 record。
 * kMiddleType 用于表示 fragment 中间的 record。
 * kLastType 用于表示 fragment 最后一个 record。
 * 这种编码方案使得 LevelDB 能够有效地管理大量的记录，并在需要时快速识别每个记录的位置和类型。
 */
enum RecordType {
  // Zero is reserved for preallocated files
  kZeroType = 0,

  kFullType = 1,

  // For fragments
  kFirstType = 2,
  kMiddleType = 3,
  kLastType = 4
};
static const int kMaxRecordType = kLastType;


/*
 * 定义了 LevelDB 中数据块（data block）的大小。该常量名为 kBlockSize，值为 32768。
 * LevelDB 是一种 KV 存储引擎，用于存储大量的键值对，并提供快速查找和访问这些数据。为了有效地管理这些数据，LevelDB 将它们分为多个逻辑部分，称为 data block 和 index block。Data block 包含一组有序的键值对，并在磁盘上以紧凑的格式存储。
 * 由于 data block 的大小会影响读写性能和内存利用率，因此需要进行合理的设置。kBlockSize 常量指定了 data block 的大小，每个 block 大小为 32KB。这个值通常被认为是一个合理的默认值，但在某些情况下，可以根据应用程序的需求进行调整。
 * 需要注意的是，kBlockSize 是一个常量，意味着它是在编译时就已经确定的，并且不能在运行时更改。这意味着如果需要更改 block 的大小，则必须重新编译整个应用程序。
 */
static const int kBlockSize = 32768;

// Header is checksum (4 bytes), length (2 bytes), type (1 byte).
static const int kHeaderSize = 4 + 2 + 1;

}  // namespace log
}  // namespace leveldb

#endif  // STORAGE_LEVELDB_DB_LOG_FORMAT_H_
